/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Testes.classes;

import Banco.Classes.Aluno;
import Banco.Classes.Arquivo;
import Banco.Classes.ConfiguracaoTurma;
import Banco.Classes.InformacaoTurma;
import Banco.Classes.Turma;
import Banco.Conexao.conexao3G;
import Banco.DAO.ArquivoDAO;
import Banco.DAO.InformacaoTurmaDAO;
import Banco.DAO.MensagensDAO;
import Banco.DAO.alunoDAO;
import Banco.DAO.turmaDAO;
import enviosms.Mensagem;
import java.sql.SQLException;
import java.util.ArrayList;
import projetosms.err.AlunoDoesntExistException;
import projetosms.err.ProjetoException;

/**
 *
 * @author Usuario
 */
public class TesteAluno {

  /**
 * Retorna uma String contendo o respectivo atributo do aluno passado como parâmetro.
 *
 * @param  matricula  o numero de matricula do aluno
 * @param  atributo atributo que se deseja ter como retorno do aluno
 * @return     uma String contendo o atributo que se deseja
 *
 */

    public String getAtributoAluno(String matricula, String atributo) throws AlunoDoesntExistException {
        alunoDAO alDAO = new alunoDAO();
        Aluno aluno = alDAO.getAluno(matricula);
        if (atributo.equalsIgnoreCase("nome")) {
            if (aluno.getNome() == null) {
                throw new AlunoDoesntExistException();
            } else {
                return aluno.getNome();
            }
        }
        if (atributo.equalsIgnoreCase("login")) {
            if (aluno.getLogin() == null) {
                throw new AlunoDoesntExistException();
            } else {
                return aluno.getLogin();
            }
        }
        if (atributo.equalsIgnoreCase("senha")) {
            if (aluno.getSenha() == null) {
                throw new AlunoDoesntExistException();
            } else {
                return aluno.getSenha();
            }
        }
        if (atributo.equalsIgnoreCase("celular")) {
            if (aluno.getCelular() == null) {
                throw new AlunoDoesntExistException();
            } else {
                return aluno.getCelular();
            }
        }
        if (atributo.equalsIgnoreCase("matricula")) {
            if (aluno.getMatricula() == null) {
                throw new AlunoDoesntExistException();
            } else {
                return aluno.getMatricula();
            }
        }
        if (atributo.equalsIgnoreCase("login")) {
            if (aluno.getLogin() == null) {
                throw new AlunoDoesntExistException();
            } else {
                return aluno.getLogin();
            }
        }
        if (atributo.equalsIgnoreCase("senha")) {
            if (aluno.getSenha() == null) {
                throw new AlunoDoesntExistException();
            } else {
                return aluno.getSenha();
            }
        }
        return null;
    }
/**
 * Retorna uma String contendo o respectivo atributo da turma passado como parâmetro.
 * Esse atributo pode ser: o numero de faltas, nota1, nota2, nota3 e nota final.
 *
 * @param  matricula  o numero de matricula do aluno
 * @param  periodo  o numero do periodo
 * @param  curso  o nome do curso
 * @param  turma  o numero da turma
 * @param  disciplina o nome da disciplina
 * @param  atributo atributo que se deseja ter como retorno da turma
 * @return      um Float contendo o atributo que se deseja da turma
 *
 */

    public float getInfoTurmaAtributo(String matricula, String periodo, String curso, String turma, String disciplina, String atributo) throws ProjetoException, AlunoDoesntExistException {
        InformacaoTurmaDAO infoTurmaDAO = new InformacaoTurmaDAO();
        InformacaoTurma infoTurma = new InformacaoTurma();
        alunoDAO alDAO = new alunoDAO();
        Aluno aluno = alDAO.getAluno(matricula);
        if (aluno.getNome() == null) {
            throw new AlunoDoesntExistException();
        }
        turmaDAO turmaDAO = new turmaDAO();
        Turma turmateste = turmaDAO.getTurma(periodo, curso, turma, disciplina);
        if (turmateste.getNome() == null) {
            throw new ProjetoException("Turma nao existe");
        }
        infoTurma = infoTurmaDAO.getInformacaoTurma(aluno, turmateste);

        if (atributo.equalsIgnoreCase("nota1")) {

            return infoTurma.getNota1();

        }
        if (atributo.equalsIgnoreCase("nota2")) {

            return infoTurma.getNota2();

        }
        if (atributo.equalsIgnoreCase("nota3")) {

            return infoTurma.getNota3();

        }
        if (atributo.equalsIgnoreCase("prova final")) {

            return infoTurma.getProvaFinal();

        }
        if (atributo.equalsIgnoreCase("numero de faltas")) {

            return (float) infoTurma.getNumeroFaltas();
            
        }
        return 0;
    }
/**
 * Esse metodo tem como parametro o numero de matricula do aluno.
 * Tem como retorno uma lista de disciplinas que o aluno pertence.
 *
 * @param  matricula  o numero de matricula do aluno
 * @return  um ArrayList contendo o nome das disciplinas
 *
 */
    public ArrayList<String> getTodasDisciplinasAluno(String matricula) {
        alunoDAO alDAO = new alunoDAO();
        ArrayList<Turma> listaTurmas = new ArrayList<Turma>();
        listaTurmas = alDAO.getTodasTurmas(matricula);
        ArrayList<String> listaDisciplinas = new ArrayList<String>();
        for (int i = 0; i < listaTurmas.size(); i++) {
            listaDisciplinas.add(listaTurmas.get(i).getDisciplina());
        }
        return listaDisciplinas;
    }

 /**
 * Esse metodo a partir dos dados de uma respectiva turma, retorna uma lista contendo
 * o corpo de mensagem de todas as mensagens enviadas para a respectiva turma.
 *
 * @param  curso  o nome do curso
 * @param  disciplina o nome da disciplina
 * @param  periodo  o numero do periodo
 * @param  turma  o numero da turma
 * @return    Uma lista contendo o contéudo textual das mensagens enviadas para a turma
 *
 */
    public ArrayList<String> getMensagensTurma(String curso, String disciplina, String periodo, String turma) throws SQLException, ProjetoException{
        ArrayList<Mensagem> listaMensagens = new ArrayList<Mensagem>();
        ArrayList<String> corpoMsg = new ArrayList<String>();
        Turma turmaTeste = new Turma();
        turmaTeste = turmaTeste.getTurma(turma, disciplina, curso, periodo);
        MensagensDAO msgDAO = new MensagensDAO();
        listaMensagens = msgDAO.getMensagensTurma(turmaTeste);
         for (int i = 0; i < listaMensagens.size(); i++) {
             corpoMsg.add(listaMensagens.get(i).getCorpoMsg());
         }
        return corpoMsg;
    }
/**
 * Esse metodo a partir dos dados de uma respectiva turma, retorna uma lista contendo
 * o nome dos arquivos enviados para a turma.
 *
 * @param  curso  o nome do curso
 * @param  disciplina o nome da disciplina
 * @param  periodo  o numero do periodo
 * @param  turma  o numero da turma
 * @return    Uma lista contendo nome dos arquivos enviados para a turma
 *
 */
    public ArrayList<String> getTodosArquivos(String curso, String disciplina, String periodo, String turma) throws ProjetoException{
        ArrayList<Arquivo> listaArquivos = new ArrayList<Arquivo>();
        ArrayList<String> nomeArquivos = new ArrayList<String>();
        Turma turmaTeste = new Turma();
        turmaTeste = turmaTeste.getTurma(turma, disciplina, curso, periodo);
        ArquivoDAO arqDAO = new ArquivoDAO();
        listaArquivos = arqDAO.getTodosArquivosTurma(turmaTeste);
        for (int i = 0; i < listaArquivos.size(); i++) {
            nomeArquivos.add(listaArquivos.get(i).getNome());
        }
        return nomeArquivos;
    }
}
